﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CourseUtils;

namespace leastAndGreatest
{
    class Numbers
    {
        /* Метод определяет наличие у двух числовых значений x и y общего множителя. 
           Если да, то возвратить наименьший и наибольший общий множители через параметры типа out.
           Код возврата типа bool используется для информирования:
           - true означает наличие множителей, а
           - false - отсутствие. */
        public bool HasComFactor(int x, int y, out int least, out int greatest)
        {
            int i;
            int max = x < y ? x : y;
            bool first = true;

            least = 1;
            greatest = 1;

            // Find least and greatest common factors. 
            for (i = 2; i <= max / 2 + 1; i++)
            {
                if (((y % i) == 0) & ((x % i) == 0))
                {
                    if (first)
                    {
                        least = i;
                        first = false;
                    }
                    greatest = i;
                }
            }

            if (least != 1) return true;
            else return false;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Numbers instanceOfNumbers = new Numbers();
            int leastCommonFactor, greatestCommonFactor;
            int firstNumber = IOHelpers.ReadIntFromConsole("    Введите два числа для определения\n a) наименьшего общего множителя и\n б) наибольшего общего делителя.\n\n Вводите первое число:\n");
            int secondNumber = IOHelpers.ReadIntFromConsole("\nа теперь введите второе число: \n");

            if (instanceOfNumbers.HasComFactor(firstNumber, secondNumber, out leastCommonFactor, out greatestCommonFactor))
            {
                Console.WriteLine("\n\n  Наименьший общий множитель чисел {0} и {1} равен {2}", firstNumber, secondNumber, leastCommonFactor);
                Console.WriteLine("\n\n  Наибольший общий множитель чисел {0} и {1} равен {2}", firstNumber, secondNumber, greatestCommonFactor);
            }
            else
                Console.WriteLine("\nОбщий множитель у чисел {0} и {1} отсутствует.", firstNumber, secondNumber);
            Console.ReadKey();

        }
    }
}

